#装饰器

"""
为了能够让程序自主记录程序运行的情况，我们需要在它原本的功能基础上加上日志记录的功能

装饰器：在不动原本函数的基础上加上额外的功能  对原本函数进行升级

装饰器的使用：
1、调用装饰器函数 把原本的函数作为参数传入
2、把返回的函数赋值给原本的函数  origin_func = new_func

定义参数装饰器:
1、调用装饰器函数，把参数传进来  第一层
2、调用装饰器函数返回的函数，把原本的函数作为参数传入     第二层接收原本函数
3、第三层接收原本参数

想在使用装饰器时用的函数功能就写在前两层中  第三层是实现新功能和旧功能层
"""

#装饰器函数
def get_func(origin_func):
    print('origin_func',origin_func)

    def new_func(*args, **kwargs):
        print('new_func:新功能')
        origin_func(*args, **kwargs)

    return new_func


def xunter_func(path):
    """
    装饰器函数
    第一层--接收装饰器参数
    :param path: 日志文件地址
    :return:
    """
    def get_func(origin_func):
        """
        接收原本的函数
        :param origin_func:原本的函数
        :return:
        """
        def new_func(*args, **kwargs):
            """
            新增加的额外功能函数,接收原本的参数
            :param args:原本的参数
            :param kwargs:
            :return:
            """
            print('new_func')
            origin_func(*args, **kwargs)

        return new_func

    return get_func

# @get_func
# 实验原本的函数
@xunter_func('日志文件地址')
def origin_func(a:int,b:int)->None:
    print(a+b)

if __name__ == '__main__':
    origin_func(a=1,b=2)